/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;

import Controlador.Bean.Log.Log;
import Controlador.Bean.Ventas.Cliente;
import Controlador.Bean.Ventas.ClienteBusqueda;
import org.apache.ibatis.session.SqlSession;
import Data.config.SessionFac;
import gui.General.Main;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JProgressBar;

/**
 *
 * @author Luis Enrique
 */
public class ServicioCliente {
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioCliente() {};
    
    static private ServicioCliente servicioCliente=null; 
		   
    public static ServicioCliente getInstance(){    
        if(servicioCliente==null) servicioCliente= new ServicioCliente();
        return servicioCliente;
    }
    
    //INICIO CLIENTE
    
    public synchronized  void agregarClientesMasivo(File file, JProgressBar ProgressBar){
        try{
            int porcentaje = 0;
            SqlSession sqlsession= SessionFac.SessionFactory().openSession();       
            FileReader fis = new FileReader(file);
            BufferedReader br = new BufferedReader(fis);
            String s = null;
            String SplitBy = ",";
            ProgressBar.setValue(15);
            while((s=br.readLine())!=null){
               String[] datos = s.split(SplitBy);
               if(datos.length != 13){
                   ProgressBar.setValue(100);
                   throw new Exception("");          
               }
               //Cliente cliente = new Cliente("",datos[0],datos[1],datos[2],datos[3],datos[4],datos[5],datos[6],datos[7],datos[8],datos[9],datos[10],datos[11],datos[12]);
               Cliente cliente = new Cliente("",datos[0],datos[1].equals("")?null:datos[1],datos[2].equals("")?null:datos[2],datos[3].equals("")?null:datos[3],datos[4].equals("")?null:datos[4],datos[5],datos[6],datos[7],datos[8].equals("")?null:datos[8],datos[9],datos[10],datos[11],datos[12]); 
           //    agregarPersonal(personal);
               String codigo = (String)sqlsession.selectOne("Data.Ventas.ServicioCliente.getNextCodigo");
                if(codigo!=null){
                    int cod= Integer.parseInt(codigo.substring(3))+1;
                    String defecto= "000000";
                    String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
                    cliente.setIdCliente(codigo.substring(0,3).concat(temp));
                }
                else
                    cliente.setIdCliente("CLI000001");
                agregarCliMasivo(cliente,sqlsession);
                porcentaje = porcentaje + 10;
                ProgressBar.setValue(25+porcentaje%75);
              }
              ProgressBar.setValue(100);
            sqlsession.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Carga Masiva de Clientes",f);
    }
    
    public synchronized void agregarCliMasivo(Cliente cliente,SqlSession sqlsession){
        sqlsession.insert("Data.Ventas.ServicioCliente.insertCliente",cliente);
        sqlsession.commit();
    }
    
    public synchronized void agregarCliente(Cliente cliente){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            String codigo = (String)sqlsesion.selectOne("Data.Ventas.ServicioCliente.getNextCodigo");
            if(codigo!=null){
                int cod= Integer.parseInt(codigo.substring(3))+1;
                String defecto= "000000";
                String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
                cliente.setIdCliente(codigo.substring(0,3).concat(temp));
            }
            else
                cliente.setIdCliente("CLI000001");
            sqlsesion.insert("Data.Ventas.ServicioCliente.insertCliente",cliente);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Agregar Cliente",f);
        }
    }
    
    public synchronized void modificarCliente(Cliente cliente){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCliente.updateCliente",cliente);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Modificar Cliente",f);
        }
    }
    
    public Cliente getCliente (String codCliente){
        Cliente cliente;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            cliente = sqlsesion.selectOne("Data.Ventas.ServicioCliente.getCliente",codCliente);			
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Obtener Cliente",f);
        }
        return cliente;
    }
            
    public ArrayList<Cliente> seleccionarAllClientes(){
        ArrayList<Cliente> clientes;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<Cliente> temp= (List)sqlsesion.selectList("Data.Ventas.ServicioCliente.getAllClientes");			
            clientes= new ArrayList(temp);
            sqlsesion.close();
            //Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Seleccionar Clientes",f);
        }
        return clientes;
    }
    
    public ArrayList<Cliente> seleccionarClientes (ClienteBusqueda clienteBusqueda){
        ArrayList<Cliente> clientes;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<Cliente> temp= (List)sqlsesion.selectList("Data.Ventas.ServicioCliente.getClientes",clienteBusqueda);			
            clientes= new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Seleccionar Clientes",f);
        }
        return clientes;
    }
    
    public void eliminarCliente (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCliente.deleteCliente",codigo);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Eliminar Clientes",f);
        }
    }
    
    public boolean consultaClienteDelete (String codCliente){
        ArrayList<Cliente> clientes;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<Cliente> temp= (List)sqlsesion.selectList("Data.Ventas.ServicioCliente.searchClienteOtros",codCliente);			
            clientes= new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCLIEN","Obtener Cliente",f);
        }
        if(clientes.size()==0){
            return true;
        }
        else
            return false;
    }
    //FIN CLIENTE
}